package com.thh.thymeleaf;

import org.apache.commons.io.IOUtils;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;
import org.thymeleaf.templatemode.TemplateMode;
import org.thymeleaf.templateresolver.ClassLoaderTemplateResolver;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;


public class TestThymeleaf {


    //@Value("${pagePath}")
    private String pagePath;

    public static void main(String[] args) {

        String template = getTemplate();
        Map dataModel = getDataModel();
       String html1= generateHtml(dataModel);  //模板解析器  + 模板(在项目的位置)+数据
      String html2=  generateHtmlByStringTemplate(template,dataModel);//没加模板解析器    字符串模板+模板数据



    }



    private static String generateHtml(Map dataModel) {
        // 1.上下文,承载数据模型:就是我们模板页面需要的变量的值

        Context context = new Context();

        context.setVariables(dataModel);//数据模型设置到上下文里
        //  File dest = new File("D:\\test_out.html");//生成的页面写的文件位置
        // 3.生成页

        try {

            //用文件实例化一个PrintWriter对象

            //   PrintWriter writer = new PrintWriter(dest, "UTF-8");

            //创建模板解析器,可以在配置里面配置

            ClassLoaderTemplateResolver resolver = new ClassLoaderTemplateResolver();

            resolver.setTemplateMode(TemplateMode.HTML);//模板模型:指定模板类型是html

            //resolver.setPrefix("templates");//设置后缀,执行模板引擎就不要加前缀templates了
            // resolver.setSuffix(".html");//设置后缀,执行模板引擎就不要加后缀html了

            //使用模板引擎就可以生成页面

            TemplateEngine engine = new TemplateEngine();//创建模板引擎

            engine.setTemplateResolver(resolver);//设置模板解析器

            // 模板名称,     上下文, 文件的实例化对象

            // engine.process("test.html", context, writer);//执行模板引擎,根据test.html模板生成页面,context上下文,writer是PrintWriter对象

            String process = engine.process("test.html", context);

            System.out.println(process);
            //执行模板引擎,根据test.html模板生成页面,context上下文,writer是PrintWriter对象
            return process;

        } catch (Exception e) {

            e.printStackTrace();


        }
        return null;
    }


    private static  String generateHtmlByStringTemplate(String templateContent, Map dataModel) {

        System.out.println("templateContent" + templateContent);
        // 1.上下文,承载数据模型:就是我们模板页面需要的变量的值
        Context context = new Context();
        context.setVariables(dataModel);//数据模型设置到上下文里
        // 3.生成页面
        try {
            TemplateEngine engine = new TemplateEngine();//创建模板引擎
            String process = engine.process(templateContent, context);
            return process;

        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }


    //获取页面的模板信息
    private static String getTemplate() {

        //模仿从mongdb数据库里拿文件数据

        //  ClassPathResource classPathResource = new ClassPathResource("templates/test1.ftl");
        // File file = classPathResource.getFile();

        URL url = TestThymeleaf.class.getResource("/test.html");

        try (
                InputStream inputStream = url.openStream();
        ) {

            String content = IOUtils.toString(inputStream, "utf-8");
            return content;
        } catch (IOException e) {
            e.printStackTrace();
        }

        return null;

    }

    private static Map  getDataModel(){
        //创建数据模型

        Map<String, Object> dataModel = new HashMap();


        dataModel.put("name", "张三");   //把nameList数据装到数据模型中

        dataModel.put("context", "<h3>页面中的内容</h3>"); //<h3>页面中的内容</h3>这个字符串装到context中

        return dataModel;
    }


}